#include<bits/stdc++.h>
#include<cmath>
using namespace std;
const int MAXN=100100;
struct Car
{
    int d;//离最南端的距离
    int v;//初速度
    int a;//加速度
}cars[MAXN];
int m=0;
int p[MAXN][2]={};//测速仪位置，几辆超速
int f(){
    int cnt=0;
    int n,L,V;cin>>n>>m>>L>>V;
    
    for(int i=0;i<n;i++){//input
        cin>>cars[i].d;
        cin>>cars[i].v;
        cin>>cars[i].a;
    }
    for(int i=0;i<m;i++)cin>>p[i][0];
    for(int i=0;i<n;i++){//cycle cars
        for(int j=0;j<m;j++){//cycle 测速仪
            if(cars[i].a==0);
            // double t=(0-cars[i].v)/cars[i].a;
            // int s=cars[i].v*t+0.5*cars[i].a*t*t;
            //if(cars[i].a>=0 && ){//是否驶离主干道warr
            if((L-p[j][0])-cars[i].d>=0){//是否经过测速仪
                if(sqrt(cars[i].v*cars[i].v+2*cars[i].a*((L-p[j][0])-cars[i].d))>V){
                    //经过测速仪时的速度
                    p[j][1]++;
                    cnt++;
                }
            }
                
        }
    }
    return cnt;
}
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    int T;cin>>T;
    int ans[T][2]={};
    
    for(int i=0;i<T;i++){
        ans[i][0]=f();
        for(int j=0;j<m;j++){
            if(p[j][1]==0){
                ans[i][1]++;
            }
        }
    }
    for(int i=0;i<T;i++){
        cout<<ans[i][0]<<" "<<ans[i][1]<<endl;
    }
        
    
    fclose(stdin);
    fclose(stdout);
    return 0;
}